/*
 * TipoIva.java
 *
 * Created on 21 de agosto de 2007, 23:13
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package dal;

import static java.lang.System.*;

import bd.BoundParam;
import bd.ConexionAvw;

import static java.sql.Types.*;
        

import excepciones.AvwException;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.logging.Level;
import java.util.logging.Logger;

import negocio.ArticuloWeb;
import negocio.TipoIva;
import negocio.UsuarioWeb;

import util.Utiles;
/**
 *
 * @author federico
 */
public class TipoIvaDAL {
    
     static final Logger logger = Utiles.iniciarLogger("TipoIvaDAL",false);
 
     
    public TipoIvaDAL() {
    }
     /**
     * Obtiene todos los usuarios existentes en el sistema.
     * @return ArrayList de objetos UsuarioWeb del sistema. 
     */
    public static ArrayList<TipoIva> listarTipoIva() throws AvwException {
        
        ArrayList<TipoIva> tipoIva = new ArrayList<TipoIva>();
        StringBuilder sql = new StringBuilder();
        ResultSet rs;
        ConexionAvw conexion = new ConexionAvw();
        sql.append("SELECT ");
        sql.append("tiv_codigo, ");
        sql.append(" tiv_nombre ");        
        sql.append("FROM avw_produccion.tipo_iva ");

        try {
            conexion.abrirConexion();
            rs = conexion.getPreparedStatementResultSet(sql, null);

            while (rs.next()) {
                TipoIva tipo = new TipoIva();
                tipo.setTivCodigo(rs.getString("tiv_codigo"));
                tipo.setTivNombre(rs.getString("tiv_nombre"));            
                tipoIva.add(tipo);
            }
        } catch (SQLException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            throw new AvwException(e);
        } finally {
            conexion.cerrarConexion();
        }

        return tipoIva;
    }
    /**
     * Inserta en el sistema el usuario pasado por parametro, 
     * @param objeto UsuarioWeb.
     */
    public static void insertarTipoIva(TipoIva tipoIva) throws AvwException {
        
        StringBuilder sql = new StringBuilder();
        ArrayList params = new ArrayList();
        ConexionAvw conexion = new ConexionAvw();
        int pos =0;
        sql.append("INSERT INTO ");
        sql.append("avw_produccion.tipo_iva( ");        
        sql.append(" tiv_nombre) ");                
        sql.append("VALUES(?)");
        try{            
            params.add(new BoundParam(++pos, tipoIva.getTivNombre().toUpperCase(), VARCHAR));            
            conexion.abrirConexion();
            conexion.executePreparedStatement(sql, params);
        }catch (SQLException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            throw new AvwException(e);
        }finally{
            conexion.cerrarConexion();
        }
    }
    
    /**
     * Elimina del sistema al usuario pasado por parametro.
     * @param objeto UsuarioWeb (con solo el codigo).
     */
    public static void eliminarTipoIva(TipoIva tipoiva) throws AvwException {
        StringBuilder sql = new StringBuilder();
        ConexionAvw conexion = new ConexionAvw();
        ArrayList params = new ArrayList();
        int pos =0;
        
        sql.append("DELETE FROM ");
        sql.append("avw_produccion.tipo_iva ");
        sql.append("WHERE ");
        sql.append(" tiv_codigo = ?");
        params.add(new BoundParam(++pos, tipoiva.getTivCodigo(),VARCHAR));
        
        //Conexion.get().startTransaction();
        try {
            conexion.abrirConexion();
            conexion.executePreparedStatement(sql, params);
        } catch (SQLException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            throw new AvwException(e);
        } finally {
            conexion.cerrarConexion();
        }
    }
     /**
     * Modifica en el sistema el Tipo Iva con codigo pasado por parametro. 
     * @param objeto UsuarioWeb.
     */
    public static void modificarUsuario(TipoIva tipoiva) throws AvwException {
        
        StringBuilder sql = new StringBuilder();
        ConexionAvw conexion = new ConexionAvw();
        ArrayList params = new ArrayList();
        int pos =0;
        
        sql.append("UPDATE ");
        sql.append("avw_produccion.tipo_iva ");
        sql.append("SET ");
        sql.append(" tiv_nombre = ?");
        sql.append(" WHERE ");
        sql.append(" tiv_codigo = ?");
        
        params.add(new BoundParam(++pos,tipoiva.getTivNombre(), VARCHAR));       
        params.add(new BoundParam(++pos,tipoiva.getTivCodigo(), VARCHAR));
        
        logger.info(sql.toString());


        try {
            conexion.abrirConexion();
            conexion.executePreparedStatement(sql, params);
        } catch (SQLException e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
            throw new AvwException(e);
        } finally {
            conexion.cerrarConexion();
        }
    }
}